library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.0 ✓ purrr 0.3.4
## ✓ tibble 3.0.1 ✓ dplyr 1.0.0
## ✓ tidyr 1.0.3 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ───────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(jpeg)
library(grid)
ds9 <- readJPEG("wedding.jpg")
blue <- ds9[,,3]
m <- prcomp(blue, scale. = T)
grid.raster(ds9)

pca_approx <- function(data, pca_loadings, d){
pca_loadings <- pca_loadings[, 1:d]
out <- (data %*% pca_loadings) %*% t(pca_loadings)
}
blueout <- pca_approx(blue, m$rotation, 5)
blueout <- (blueout - min(blueout)) / max(blueout - min(blueout))
grid.raster(as.raster(blueout))

blueout <- pca_approx(blue, m$rotation, 600)
blueout <- (blueout - min(blueout)) / max(blueout - min(blueout))
grid.raster(as.raster(blueout))
